package org.yzhzc.job.handler.question;

import cn.hutool.core.collection.CollectionUtil;
import com.github.pagehelper.PageHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.yzhzc.common.core.constants.CacheConstants;
import org.yzhzc.common.core.constants.Constants;
import org.yzhzc.common.redis.service.RedisService;
import org.yzhzc.job.mapper.user.UserSubmitMapper;

import java.util.List;

@Slf4j
@Component
public class QuestionXxlJob {

    // 注入 UserSubmitMapper，用于查询用户提交的题目列表
    @Autowired
    private UserSubmitMapper userSubmitMapper;

    // 注入 RedisService，用于操作 Redis 缓存
    @Autowired
    private RedisService redisService;

    /**
     * 定时任务方法，用于统计热门题目列表并存入 Redis 缓存
     * 该方法会定时从数据库中获取热门题目 ID 列表，然后刷新到 Redis 中
     */
    @XxlJob("hostQuestionListHandler") // 通过 @XxlJob 注解注册该方法为 XXL-JOB 的任务
    public void hostQuestionListHandler() {
        // 记录任务执行的开始
        log.info("----- 题目热门列表统计开始 ------");

        // 使用 PageHelper 进行分页查询，分页参数由常量提供
        // Constants.HOST_QUESTION_LIST_START: 页码
        // Constants.HOST_QUESTION_LIST_END: 每页条数
        PageHelper.startPage(Constants.HOST_QUESTION_LIST_START, Constants.HOST_QUESTION_LIST_END);

        // 从数据库中查询热门题目的 ID 列表
        List<Long> questionIdList = userSubmitMapper.selectHostQuestionList();

        // 如果查询结果为空，则直接返回，避免后续无效操作
        if (CollectionUtil.isEmpty(questionIdList)) {
            return;
        }

        // 清空 Redis 中原有的热门题目列表数据
        redisService.deleteObject(CacheConstants.QUESTION_HOST_LIST);

        // 将新的热门题目 ID 列表存入 Redis（右侧推入列表）
        redisService.rightPushAll(CacheConstants.QUESTION_HOST_LIST, questionIdList);

        // 记录任务执行的结束
        log.info("----- 题目热门列表统计结束 ------");
    }
}
